import type { ChatMessages, InsightConfig, StatusMessage } from '@/common/models/chat-message';
import type { EventBusKey } from '@vueuse/core'
import type { Section } from '../models/recommend-result';
import type { ChatCommand } from './chat-command';
import type { RobotMessage } from '../models/robot-message';
import type { ChartSelectContent } from '@/common/models/aigc-data-vis';

// 页面key 用于导航栏跳转
export const pageKey: EventBusKey<{ name: string }> = Symbol('page-key');

// 页面key 用于页面切换 first为true时代表首次进入页面
export const pageChangeKey: EventBusKey<{ title: string, id: string, first?: boolean }> = Symbol('page-change');

// 卡片key 用于卡片锚点、拖拽等事件
export const sectionKey: EventBusKey<Section> = Symbol('section-key');

// 卡片key 用于卡片排序事件
export const sectionSort: EventBusKey<{ newIndex: number | undefined, oldIndex: number | undefined }> = Symbol('section-sort');

// 卡片key 用于卡片插入事件
export const sectionInsert: EventBusKey<{ askId: string, section: Section, index?: string }> = Symbol('section-insert');

// 卡片key 用于卡片更新事件
export const sectionUpdate: EventBusKey<{ section: Section, askId: string }> = Symbol('section-update');

// 卡片key 用于卡片点击选中事件
export const sectionSelect: EventBusKey<{ section: Section, data?: ChartSelectContent, commands: ChatCommand[] }> = Symbol('section-select');

// 卡片key 用于卡片操作事件（删除、切图、改描述等）
export const sectionOperator: EventBusKey<{ section: Section | null, id: string }> = Symbol('section-operator');

// 消息key 用于消息发送
export const messageKey: EventBusKey<ChatMessages> = Symbol('message-key');

// 消息更新 （解决vue3数组内容变化不监听情况）
export const messageUpdateKey: EventBusKey<{ id: string, status?: StatusMessage }> = Symbol('message-update-key');

// 消息更新 （解决vue3数组内容变化不监听情况）
export const messageRegenerateKey: EventBusKey<{ id: string }> = Symbol('message-regenerate-key');

// 更新页面视图
export const updateViewKey: EventBusKey<{ id: string }> = Symbol('update-view-key');

// 问句变更
export const questionUpdateKey: EventBusKey<{ questions: string[] }> = Symbol('question-update-key');

// 重置对话
export const chatResetUpdateKey: EventBusKey<any> = Symbol('chat-reset-update-key');

// 机器人消息
export const robotMessageKey: EventBusKey<RobotMessage | null> = Symbol('robot-message-key');

// 机器人问句消息
export const robotQuestionMessageKey: EventBusKey<{ section: Section }> = Symbol('robot-question-message-key');

// 可视化洞察消息
export const insightConfigMessageKey: EventBusKey<InsightConfig> = Symbol('insight-config-message-key');